import java.io.*;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

public class UnzipJar {
    public static void unzip() {
        String jarFilePath = "/Users/limeng/Documents/打板/上交所-交易网关/Demo/tdgw.jar"; // 要解压缩的JAR文件路径
        String outputDirectory = "/Users/limeng/Documents/打板/上交所-交易网关/Demo/tgw_source"; // 解压缩后的输出目录

        try {
            // 创建一个JarFile对象
            JarFile jarFile = new JarFile(jarFilePath);

            // 获取JAR文件中的所有条目
            Enumeration<JarEntry> entries = jarFile.entries();

            // 获取解密key
            byte[] decode_key = DeCode.getKey();

            // 遍历每个条目并解压缩
            while (entries.hasMoreElements()) {
                JarEntry entry = entries.nextElement();
                String entryName = entry.getName();
//                System.out.println(entryName);

                // 构建输出文件的路径
                String outputPath = outputDirectory + File.separator + entryName;

                // 如果是文件夹，创建相应的目录
                if (entry.isDirectory()) {
                    File dir = new File(outputPath);
                    dir.mkdirs();
                } else {
                    // 如果是文件，创建父目录并解压缩文件内容
                    File parentDir = new File(outputPath).getParentFile();
                    if (!parentDir.exists()) {
                        parentDir.mkdirs();
                    }
                    try {
                        InputStream inputStream = jarFile.getInputStream(entry);
                        FileOutputStream outputStream = new FileOutputStream(outputPath);
                        if(entryName.startsWith("com/sse")){
                            System.out.println(entryName);
                            inputStream = DeCode.decode(decode_key, inputStream);
                        }
                        byte[] buffer = new byte[1024];
                        int bytesRead;
                        while ((bytesRead = inputStream.read(buffer)) != -1) {
                            outputStream.write(buffer, 0, bytesRead);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
            // 关闭JarFile
            jarFile.close();
            System.out.println("JAR文件解压完成。");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
